*/
public static function embeddable( $frame, $less ) {
$base = pathinfo( $less->parser->sourceName, PATHINFO_DIRNAME );
- $url = $frame[2][0];
+ $url = trim( $less->compileValue( $frame ), '"\'' );
$file = realpath( $base . '/' . $url );
return $less->toBool( $file
&& strpos( $url, '//' ) === false
*/
public static function embed( $frame, $less ) {
$base = pathinfo( $less->parser->sourceName, PATHINFO_DIRNAME );
- $url = $frame[2][0];
+ $url = trim( $less->compileValue( $frame ), '"\'' );
$file = realpath( $base . '/' . $url );
$data = CSSMin::encodeImageAsDataURI( $file );
--- /dev/null
+<?php
+
+class ResourceLoaderLESSTest extends MediaWikiTestCase {
+ public static function lessProvider() {
+ $result = array();
+ foreach ( glob( __DIR__ . '/fixtures/*.less' ) as $file ) {
+ $result[] = array( $file );
+ }
+
+ return $result;
+ }
+
+ /**
+ * @dataProvider lessProvider
+ */
+ public function testLessFile( $lessFile ) {
+ $cssFile = substr( $lessFile, 0, -4 ) . 'css';
+ if ( !file_exists( $cssFile ) ) {
+ $this->fail( "No css file found to assert equal to $lessFile" );
+ return;
+ }
+
+ $expect = file_get_contents( $cssFile );
+ $content = file_get_contents( $lessFile );
+ $result = ResourceLoader::getLessCompiler()->compile( $content, $lessFile );
+ $this->assertEquals( $expect, $result );
+ }
+}
--- /dev/null
+.box {
+ content: not-embeddable;
+}
+.box {
+ content: embeddable;
+}
+.box {
+ content: embeddable;
+}
--- /dev/null
+@base: '../fixtures/';
+
+.helper(@url) when (embeddable(@url)) {
+ content: embeddable;
+}
+.helper(@url) when not (embeddable(@url)) {
+ content: not-embeddable;
+}
+
+.box {
+ .helper('path/to/nonexistent/file');
+}
+
+.box {
+ .helper('001-embeddable.css');
+}
+
+.box {
+ .helper("@{base}001-embeddable.css");
+}